During a program development process, a programmer often needs to debug a compiled program to find grammatical and/or logical errors in the program source codes. A debugger is a common tool for executing debugging. For example, a dedicated debugger is always provided in an integrated development environment (IDE). For a debugging session in a single system, the debugging process is always completed using one or more breakpoints. As already known, the breakpoints are used for stopping a program in a debugging session at a location designated by the programmer so as to analyze the state of the program, a numerical value of a particular variable, etc.
However, in a multi-system environment, cross-system program debugging faces many challenges. In such an environment, tasks running on different systems always have a coordination or dependency relationship therebetween. Currently, automatic debugging cannot be realized in a cross-system environment. A user needs to initiate a plurality of debugging sessions on different systems, and control coordination and communication between different debugging sessions in a manual manner. During this process, the user needs to frequently switch between debugging sessions of different systems so as to locate a correct breakpoint. This process is time-consuming and error-prone. Moreover, after the user completes a round of debugging, it is hard to reproduce problems.
Additionally, for a to-be-debugged program supporting concurrent tasks, it is likely that a considerable number of tasks are simultaneously running on different systems in coordination. In a traditional solution, it is hard to accurately find correlated tasks under debugging in multiple tasks from different systems. For example, it is impossible to accurately determine execution of which relevant tasks on other systems is triggered by a debugged task on one system. Therefore, error like occurs to coordination between different debugging tasks, which causes failure of the whole debugging process.